var g_alter_lock=false;
var g_old_value;
var g_history=[];
var g_index=-1;
$(function() {
	$('#query').submit(doSubmit);
	$('#status').click(status);
	$('#add').click(add);
	$('#front').click(go_front);
	$('#back').click(go_back);
	//$('#body').attr('onSelectStart','return false');
	$('body').attr('onContextMenu','return false');
	
});

function go_front()
{
//	alert(g_index+':'+g_history.length);
	if(g_index>=0&&g_history.length&&g_index<g_history.length)
	{
		$('#res').html(g_history[++g_index]);
	}
}
function go_back()
{  
//	alert(g_index+':'+g_history.length);
	if(g_index>0&&g_history.length&&g_index<=g_history.length)
	{
		$('#res').html(g_history[--g_index]);
	}
}
function history_add(_html)
{
//	var _new=true;
//	if(g_history.length>0)
//	{
//		var len=g_history.length;
//		for(var i=0;i<len;++i)
//		{
//			if(_html==g_history[i])
//			{
//				_new=false;
//				break;
//			}
//		}
//	}
//	if(_new)
//	{
//		
//		g_history.push(_html);
//		g_index++;
//	}
}
function defined(variale){
	return typeof(variable)!=='undefined';
}
function define(key,value){
	window.key=value;
}
function trim(value){
	
	if(typeof(value)=='string')
	{
	    value=value.replace(/\s+/,'');
	}
	return value;
}
function status() {
	var _sub_data={};
	_sub_data['server']= $('#server').val();
	$.getJSON('index.php?act=info', _sub_data, function(_data) {
		// $('#res').html(_data);
		var _tb = '<table border="1" style="border: 10px">';
		if (_data) {
			for ( var x in _data) {
				if (_data[x] && info[x]) {
					_tb += '<tr>';
					_tb += '<td>' + info[x] + '</td><td>' + _data[x] + '</td>';
					_tb += '</tr>';
				}
			}
		}
		_tb += '</table>';
		$('#res').html(_tb);
		history_add(_tb);
	});
}
function doSubmit() {
	var subData = {
		'len' : 0
	};
	subData['server'] = $('#server').val();
	if ($('#key').val() != '') {
		subData['key'] = trim($('#key').val());
		++subData['len'];
	}
	if ($('#type').val() != '') {
		subData['type'] = $('#type').val();
		++subData['len'];
	}
	if (subData.len== 1) {
		return;
	}
	$.getJSON(
					'index.php?act=query',
					subData,
					function(_data) {
						var type=$('#type').val();
						switch(type)
						{
						case '0':
							_do_list_string(_data);
							break;
						case '1':
							_do_string(_data);
							break;
						case '2':
							_do_hash(_data);
							break;
						case '3':
							_do_list(_data);
							break;
						case '4':
							_do_set(_data);
							break;
						case '5':
							_do_zset(_data);
							break;
					    default:
					    	break;
						}
					});
	var subData = {
		'len' : 0
	};
}

function _process(_data,_type,_has_index){
	if(typeof(_data)=='object')
	{  
	   var _key=$('#key').val();
	   var _l_type=$('#type').val();
	   var _delete_button='<input id="common_add" _type="'+_l_type+'" _key="'+_key+'" type="button" value="添加" /><input id="'+_type+'delete" _type="'+_l_type+'" _key="'+_key+'" type="button" value="删除" /><br>';
	   var _tb=_delete_button+'<table border="1" style="border: 10px">';
	   var flag=false;
		if(_data.type&&_data.ttl)
		{
		  _tb='<table border="1" style="border: 10px"><tr><td>类型</td><td>'+_data.type+'</td><td>生存时间</td><td>'+_data.ttl+'</td><td><a class="alter" type="header" href="javascript:void(0);">改</a></tr></table>'+_tb;
		}
		  if(_has_index){
			  _tb+='<tr><th>索引</th><th>值</th><th>操作</th></tr>';
		  }else{
			  _tb+='<tr><th>值</th><th>操作</th></tr>';
		  }
		  
	   for(var x in _data)
	   {
		   if(!isNaN(parseInt(x))){
			   if(flag==false)flag=true;
			   if(_type!=='zset'&&_has_index){
				   _tb+='<tr><td>'+x+
				   '</td><td>'+_data[x]+'</td><td><a class="alter" href="javascript:void(0);">改</a>,<a class="del" href="javascript:void(0);">删</a></td></tr>';  
			   }else if(_type=='zset'){
				   _tb+='<tr><td>'+_data[x]['index']+
				   '</td><td>'+_data[x]['value']+'</td><td><a class="alter" href="javascript:void(0);">改</a>,<a class="del" href="javascript:void(0);">删</a></td></tr>';  
			   }
			   else{
				   _tb+='<tr></td><td>'+_data[x]+'</td><td><a class="alter" href="javascript:void(0);">改</a>,<a class="del" href="javascript:void(0);">删</a></td></tr>';  
			   }
		   }
		   
	   }
		_tb += '</table>';
		if(flag)
		{
			$('#res').html(_tb);
			history_add(_tb);
		}else{
			$('#res').html('<span style="background-color:red">键不存在</span>');
		}
		$('#'+_type+'delete').click(common_delete);
		$('#common_add').click(common_add);
		$('table a.del').click(common_delete);
		$('table a.alter').click(common_alter);
	}
}

function common_delete(){
   if($(this).attr('_key')!=''&&
      $(this).attr('_type')!='')
   {
    var th=this;
	   
      var ret=confirm('确认删除?');
      if(ret){
   	   //删除 子数据
		   var _sub_data={};
		  _sub_data['server'] = $('#server').val();
		  _sub_data['key']=$(this).attr('_key');
		  _sub_data['type']=$('#type').val();
		  if(!_sub_data['key'])
		  {
			  _sub_data['key']=$('#key').val();
		  }
	   	  if(this.tagName=='A')
    	  {
    		  _sub_data['value']=$(this).parent().prev().html();
    		  _sub_data['hkey']=$(this).parent().prev().prev().prev().html();
    		  _sub_data['index']=$(this).parent().prev().prev().html();
    	  }
	      $.getJSON('index.php?act=delete',_sub_data,function(_data){
	    	   if(_data&&_data.code=='0000')
    		   {
//	    		   alert($(th).parent().parent('tr').html());
	    		   var index=0;
	    		   if($('#type').val()=='3'){
	    		   $(th).parent().parent('tr').siblings().children('td:first-child').each(function(e,l){
//	    			   alert($(th).parent().parent('tr').html());
//	    			   alert($(l).parent().html());
	    			   if($(l).parent().html()===$(th).parent().parent('tr').html()){
	    				   alert($(l).html());
	    				return true;   
	    			   }
	    			   $(l).html(index++);
	    		   });
    		   }
	    		   
	    		   $(th).parent().parent('tr').hide(1);
			   	   $(th).parent().parent('tr').remove();
			   	   
    		   }else if(_data&&_data.code=='0001')
				   {
				   		//$(th).parent('tr').hide();
				   		//$(th).parent('tr').remove();
    			   alert('删除失败');
				   }
	      });
      }
   }
}

function _do_hash(_data){
	if(_data&&typeof(_data)=='object')
	{
		var _key=$('#key').val();
		var _hd='';
		if(_data.type&&_data.ttl)
		{
			_hd+='<table border="1" style="border: 10px"><tr><td>类型</td><td>'+_data.type+'</td><td>生存时间</td><td>'+_data.ttl+'</td><td><a class="alter" type="header" href="javascript:void(0);">改</a></tr></table>';
		}
		var _delete_button='<input id="hash_add" _type="2" _key="'+_key+'" type="button" value="添加" /><input id="hashdelete" _type="2" _key="'+_key+'" type="button" value="删除" /><br>';
		var _tb=_hd+_delete_button+'<table border="1" style="border: 10px">';
		var flag=false;
		_tb+='<tr><th>键</th><th>值</th><th>操作</th></tr>';
	   for(var x in _data)
	   {
		   if(_data[x]&&typeof(_data[x])=='object'){
		   if(flag==false)flag=true;
		   _tb+='<tr><td>'+_data[x]['key']+
		   '</td><td>'+_data[x]['value']+'</td><td><a class="alter" href="javascript:void(0);">改</a>,<a class="del" href="javascript:void(0);">删</a></td></tr>';
		   }
	   }
		_tb += '</table>';
		if(flag)
		{
			$('#res').html(_tb);
			history_add(_tb);
		}else{
			$('#res').html('<span style="background-color:red">键不存在</span>');
		}
		$('#hashdelete').click(common_delete);
		$('table a.del').click(common_delete);
		$('table a.alter').click(common_alter);
		$('#hash_add').click(hash_add);
	}
}
function hash_add()
{
	add();
	$('#add_type').val('5'); 
	$('#add_key').val($('#key').val());
	$('#add_key').attr('disabled','disabled');
    $('#add_type').trigger('change');
	$('#add_type').attr('disabled','disabled');
	history_add($('#res').html());
}

function common_add()
{
   var type=$(this).attr('_type');
   add();
   if(type=='4')
   {
	   type=2;
   }
   if(type=='5')
   {
	   type=4;

   }
   $('#add_type').val(type); 
   $('#add_key').val($('#key').val());
   $('#add_key').attr('disabled','disabled');
   $('#add_type').trigger('change'); 
   $('#add_type').attr('disabled','disabled');
   history_add($('#res').html());
}
function common_alter(){
	if(g_alter_lock)
	{
	 return  alert('有一项编辑正在进行,请先保存');
	}
	var _html=$(this).parent().prev().html();
	g_old_value=_html;
	_html='<textArea>'+_html+'</textArea>';
	$(this).parent().prev().html(_html);
	$(this).html('保');
	g_alter_lock=true;
	$(this).unbind('click');
	$(this).click(common_save);
	$(this).next().unbind('click');
}



function common_save(){
	var type=$('#type').val();
	var key=$('#key').val();
	var _sub_data={};
	var th=this;
	_sub_data['key']=key;
	_sub_data['type']=type;
	_sub_data['server'] = $('#server').val();
	_sub_data['index']=$(this).parent().prev().prev().html();
	_sub_data['hkey']=$(this).parent().prev().prev().html();
//	alert($(th).parent().prev().children('textArea').val());
	_sub_data['value']=$(this).parent().prev().children('textArea').val();
	_sub_data['oldvalue']=g_old_value;
	
	var type=$(this).attr('type');
	var url=type==='header'?'index.php?act=save':'index.php?act=update';
	if(type==='header')
	{
		_sub_data['ttl']=$(this).parent().prev().children('textArea').val();
	}
	$.getJSON(url,_sub_data,function(_data){
		if(_data&&_data.code=='0000')
		{
			alert('修改成功');
		}else if(_data&&_data.code=='0001'){
			alert('修改失败');
		}
		$(th).parent().prev().html($(th).parent().prev().children('textarea').val());
		g_alter_lock=false;
		$(th).html('改');
		$(th).unbind('click');
		$(th).click(common_alter);
		$(th).next().click(common_delete);
	});
	g_old_value='';
	_sub_data={};
}

function _do_set(_data){
	_process(_data,'set',false);
}
function _do_zset(_data){
	_process(_data,'zset',true);
}
function _do_list(_data){
	_process(_data,'list',true);
}
function _do_string(_data){
	
	if ((_data['key']) && (_data['value']) && (_data['type'])
	&& (_data['ttl'])) {
		var _tb = '<table border="1" style="border: 10px">';
		_tb += '<tr><td>键</td><td id="key_key">'
				+ _data.key
				+ '</td></tr><tr><td>键值</td><td id="key_value">'
				+ _data.value
				+ '</td></tr><tr><td>键类型</td><td id="key_type">'
				+ _data.type
				+ '</td></tr><tr><td>生存时间</td><td id="key_time">'
				+  _data.ttl
				+ '</td></tr><tr><td><input type="button" id="alter" value="修改"/> </td><td><input onclick="doDelete(\''+_data.key+'\')"  type="button" value="删除" /></td>'+
				'</tr>';
		_tb += '</table>';
		$('#res').html(_tb);
		$('#alter').click(key_alter);
		history_add(_tb);
	}else{
		_tb='<span style="background-color:red">键不存在</span>';
		$('#res').html(_tb);
	}
	
}

function string_detail(){
	$('#key').val($(this).html());
	$('#type').val('1');
	doSubmit();
}

function _do_list_string(_data){
	if(_data&&_data.length>0)
    {
		  var _tb='<table border="1" style="border: 10px">';
		  for(var x=0;x<_data.length;++x)
		  {
		    var d=_data[x];
		    if(typeof(d['key'])!='undefined'&&typeof(d['type'])!='undefined')
	    	{
		    	_tb+='<tr><td>键</td><td><a class="detail" href="javascript:void(0);">'+d['key']+'</a></td><td>类型</td><td>'+d['type']+'</td></tr>';
	    	}
		  }
		  _tb += '</table>';
		  $('#res').html(_tb);
		  history_add(_tb);
		  $('table a.detail').click(string_detail);
	  }
}
function doDelete(key) {
   cfm=confirm('您确定删除吗?');
   if(!cfm)return;
   $.getJSON('index.php?act=delete',{'key':key,'type':'1','server':$('#server').val()},function(_data){
	   if(_data&&_data.code=='0000'){
		   $('#res').html(_data.msg);
	   }else if(_data&&_data.code=='0001')
	   {
		   $('#res').html(_data.msg);
	   }
   });
}
function key_alter()
{
  var k_value,k_type,k_time;
  k_value=$('#key_value').html();
  k_type=$('#key_type').html();
  k_time=$('#key_time').html();
  $('#key_value').html('<textArea id="d_k_value" cols="100" rows="5" >'+k_value+'</textArea>');
//  $('#key_type').html('<input id="d_k_value" type="text" value="'+k_type+'"/>');
  $('#key_type').html(generate_types(1));
  $('#key_time').html('<input id="d_k_time" type="text" value="'+k_time+'"/>');
  $('#alter').val('保存');
  $('#alter').unbind('click');
  $('#alter').click(doSave);
  
}
function showHTML(which){
	return globals[which];
}
function add(){
	$('#res').html(showHTML('add'));
	$('#add_type').change(type_change);
	$('#g_add').click(do_add);
}
function do_add(){
	var type=$('#add_type').val();
	var _sub_data={};
	if($('#add_key').val()=='')
	{
	   alert('键必须');
	   $('#add_key').focus();
	   return;
	}
	if($('#add_value').val()=='')
	{
		alert('键值必须');	
		$('#add_key').focus();
		return;
	}
	_sub_data['key']=$('#add_key').val();
	_sub_data['type']=type;
	_sub_data['server'] = $('#server').val();
	_sub_data['value']=$('#add_value').val();
	switch(type){
		case '1':
			break;
		case '2':
			break;
		case '3':
			if($('#add_index').val()=='')
			{
				alert('索引必须');	
				$('#add_key').focus();
				return;
			}
			_sub_data['index']=$('#add_index').val();
			break;
		case '4':
			if($('#add_scope').val()=='')
			{
				alert('范围必须');	
				$('#add_scope').focus();
				return;
			}
			_sub_data['index']=$('#add_scope').val();
			break;
		case '5':
			if($('#add_hkey').val()=='')
			{
				alert('子键必须');	
				$('#add_hkey').focus();
				return;
			}
			_sub_data['hkey']=$('#add_hkey').val();
			break;
	    default:
	    	break;
	}
	$.getJSON('index.php?act=add',_sub_data,function(_data){
		   if(_data&&_data.code=='0000'){
			   alert(_data.msg);
		   }else if(_data&&_data.code=='0001')
		   {
			   alert(_data.msg);
		   }
		   //_sub_data={};
	});
	
}
function type_change(){
	 if($(this).val()!='1'&&$(this).val()!='2')
     {
		switch($(this).val()){
		case '3':
			$('#addtion').html(showHTML('index'));
			break;
		case '4':
			$('#addtion').html(showHTML('scope'));
			break;
		case '5':
			$('#addtion').html(showHTML('hkey'));
			break;
	    default:
	    	break;
		}
	 }
}
function doSave(){
	var _sub_data={};
	_sub_data['key']=$('#key_key').html();
	_sub_data['value']=$('#d_k_value').val();
	_sub_data['type']=$('#d_k_type').val();
	_sub_data['ttl']=$('#d_k_time').val();
	_sub_data['server'] = $('#server').val();
    $.getJSON('index.php?act=save',_sub_data,function(_data){
    	  if(_data&&_data.code=='0000')
    	  {
    		  $('#res').html(_data.msg);
          }else if(_data&&_data.code=='0001'){
        	  $('#res').html(_data.msg);
          }
    	  
//    	  $('#alter').attr('onclick','');
    	  $('#alter').unbind('click');
    	  $('#alter').click(key_alter);
    });
    _sub_data={};
}